﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace I3.AgenteIA.Dominio.Gramatica
{
    public class Oracao
    {
        /// <summary>
        /// Armazena as sentencas da oração
        /// </summary>
        private IList<Sentenca> _sentencas = new List<Sentenca>();

        /// <summary>
        /// Sentencas da oração
        /// </summary>
        public IEnumerable<Sentenca> Sentencas { get { return _sentencas; } }

        /// <summary>
        /// Texto da oração
        /// </summary>
        public virtual string Texto { get; protected internal set; }

        /// <summary>
        /// Construtor para override
        /// </summary>
        protected Oracao()
        {
            this.Texto = "";
        }

        /// <summary>
        /// Construtor padrão oração
        /// </summary>
        /// <param name="texto">Texto da oração</param>
        public Oracao(string texto)
        {
            if(String.IsNullOrEmpty(texto))
                throw new ArgumentNullException("O texto de uma oração não pode estar vazio");

            this.Texto = texto;
        }

        /// <summary>
        /// Cria a instancia de uma nova sentença e insere na lista de sentenças da oração.
        /// </summary>
        public virtual Sentenca CriarSentenca(string texto)
        {
            // Verifica se o texto informado está presente na oração
            // caso não, emite uma exception informando que a sentença não pode ser criada
            if (!this.Texto.Contains(texto))
                throw new ArgumentException("o texto informando não existe na oração");

            // Cria a instancia de uma nova sentença e insere as 
            // informações na lista de sentenças da oração.
            _sentencas.Add(new Sentenca(this, texto));

            // Retorna a instancia da sentença criada
            return _sentencas.Last();
        }
    }
}
